package com.ming_za.odupdaterserver.core.utils;

import com.ming_za.odupdaterserver.core.thread.LogThread;
import lombok.Getter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

@Component
public class Msg {

    private final Logger logger = LoggerFactory.getLogger("");

    private final LogThread logThread;

    @Getter
    private static Msg instance;

    public Msg(LogThread logThread) {
        this.logThread = logThread;
        instance = this;
    }

    /**
     * 将颜色代码 转换成 控制台颜色代码
     * @param msg 消息文本
     * @return 转换后的字符串
     */
    public String toConsoleColor(String msg){

        if (!msg.contains("&")){
            return msg;
        }

        try {
            msg = msg + "&r";

            msg = msg.replace("&0","\u001B[30m");
            msg = msg.replace("&1","\u001B[34m");
            msg = msg.replace("&2","\u001B[32m");
            msg = msg.replace("&3","\u001B[36m");
            msg = msg.replace("&4","\u001B[31m");
            msg = msg.replace("&5","\u001B[35m");
            msg = msg.replace("&6","\u001B[33m");
            msg = msg.replace("&7","\u001B[37m");
            msg = msg.replace("&8","\u001B[30m");
            msg = msg.replace("&9","\u001B[34m");
            msg = msg.replace("&a","\u001B[32m");
            msg = msg.replace("&b","\u001B[36m");
            msg = msg.replace("&c","\u001B[31m");
            msg = msg.replace("&d","\u001B[35m");
            msg = msg.replace("&e","\u001B[33m");
            msg = msg.replace("&f","\u001B[37m");
            msg = msg.replace("&r","\u001B[0m");
            msg = msg.replace("&l","");
            msg = msg.replace("&o","");
            msg = msg.replace("&n","");
            msg = msg.replace("&m","");
            msg = msg.replace("&k","");
            return msg;
        }catch (Exception e){
            error(e.getMessage(),e);
            return null;
        }
    }

    public String toLog(String msg){

        if (!msg.contains("&")){
            return msg;
        }

        try {
            msg = msg.replace("&0","");
            msg = msg.replace("&1","");
            msg = msg.replace("&2","");
            msg = msg.replace("&3","");
            msg = msg.replace("&4","");
            msg = msg.replace("&5","");
            msg = msg.replace("&6","");
            msg = msg.replace("&7","");
            msg = msg.replace("&8","");
            msg = msg.replace("&9","");
            msg = msg.replace("&a","");
            msg = msg.replace("&b","");
            msg = msg.replace("&c","");
            msg = msg.replace("&d","");
            msg = msg.replace("&e","");
            msg = msg.replace("&f","");
            msg = msg.replace("&r","");
            msg = msg.replace("&l","");
            msg = msg.replace("&o","");
            msg = msg.replace("&n","");
            msg = msg.replace("&m","");
            msg = msg.replace("&k","");
            return msg;
        }catch (Exception e){
            error(e.getMessage(),e);
            return null;
        }
    }

    /**
     * 打印/输出消息
     * @param msg 消息文本
     */
    public void soutMsg(String msg){
        System.out.println(toConsoleColor(msg));
    }

    public void info(String msg){
        logThread.runTask(()-> logger.info(toConsoleColor(msg)));
    }

    public void error(String msg){
        logThread.runTask(() -> {
            logger.error(toConsoleColor("&c" + msg));
        });
    }

    public void error(String msg,Object object){
        logThread.runTask(() -> {
            logger.error(toConsoleColor("&c" + msg),object);
        });
    }

    public void warn(String msg){
        logThread.runTask(() -> logger.warn(toConsoleColor("&e" + msg)));
    }

    public void debug(String msg){
        logThread.runTask(() -> logger.debug(toConsoleColor("&e" + msg)));
    }
}
